import socket
import os
from time import sleep
os.chdir(os.path.dirname(__file__)) 


class HMI:

    def __init__(self, target_ip='192.168.10.40', target_port=32897, self_ip='192.168.10.100', self_port=32896):
        self.target_ip = target_ip
        self.target_port = target_port
        self.self_ip = self_ip
        self.self_port = self_port
        # 创建一个 UDP 套接字
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # 如果需要，可以绑定到特定的本地 IP 和端口
        self.sock.bind((self.self_ip, self.self_port))
        # 设置超时为5秒
        self.sock.settimeout(1)
    def connect(self):
        a=0
    def disconnect(self):
        a=0
    def live(self):
        a=0
    def stoplive(self):
        a=0
    def prerare(self):
        a=0
    def singleshot(self):
        a=0
    
    def send_prepare(self):
        try:
            with open(r'./prepare_cmd.bin', 'rb') as file:
                data = file.read()
                # 由于UDP包大小的限制，你可能需要将文件分成多个包发送
                # 这里我们假设文件不是很大，可以一次性发送
                # 如果文件很大，你需要实现分包逻辑
                # 发送数据
                self.sock.sendto(data, (self.target_ip, self.target_port))
                #print(f"Sent message: '{data}' to {self.target_ip}:{self.target_port}")    
        except Exception as e:
            print(f"Error sending message: {e}")
    def getdata(self):
        #如果需要接收响应，可以取消注释以下部分
        data, addr = self.sock.recvfrom(1050)
        #print(f"Received response from {addr}: '{data.tostring('')}'")
        return data

    # 添加一个关闭套接字的方法，以便在不再需要时清理资源
    def close(self):
        self.sock.close()
        print("Socket closed.")

# 使用示例
if __name__ == '__main__':
    hmi = HMI()
    hmi.send_prepare()
    hmi.getdata()
    hmi.getdata()
    data =hmi.getdata()
    # 当不再需要 HMI 实例时，关闭套接字
    hmi.close()